package com.cfets.annualAssessment.service;

import com.cfets.annualAssessment.entity.InitialFronSelector;
import com.cfets.annualAssessment.entity.Parameter;
import com.cfets.annualAssessment.mapper.ParameterMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;

import java.util.ArrayList;
import java.util.List;
/**
 * Created by ShenYiChou on 2017/1/26.
 */
@Service
public class ParameterService {
    @Autowired
    private ParameterMapper parameterMapper;

    public List<Parameter> getParameterPage(Parameter parameter) {
        Page<?> page = PageHelper.startPage(parameter.getPage(), parameter.getRows());
        List<Parameter> parameters = null;
        parameters = parameterListForOrder(parameter);
        parameter.setTotalCount(page.getTotal());
        return parameters;
    }

    public boolean newParameter(Parameter parameter) {
        if(!pareValueDupOrNot(parameter)){
            return false;
        }
        List<Parameter> parameters = null;
        parameters = parameterListForOrder(parameter);
        if (!parameters.isEmpty()) {
            parameter.setPara_order(parameters.get(0).getPara_order() + 1);
        }else{
            parameter.setPara_order(1);
        }
        return parameterMapper.insertSelective(parameter)>0;
    }

    public boolean updateParameter(Parameter parameter) {
        List<Parameter> parameters = this.parameterListForOrder(parameter);
        boolean flag = false;
        int orderOld = 0;
        int orderNew = parameter.getPara_order();
        for(Parameter item:parameters){
            if (parameter.getId() == item.getId()){
                orderOld = item.getPara_order();
            }
        }
        if(orderOld<orderNew)
        {
            for(Parameter item:parameters){
                if (item.getPara_order()<=orderNew&&item.getPara_order()>orderOld){
                    item.setPara_order(item.getPara_order()-1);
                    flag = (parameterMapper.updateByPrimaryKey(item)>0);
                    if(!flag) return false;
                }
            }
        }else if(orderOld>orderNew){
            for(Parameter item:parameters){
                if (item.getPara_order()>=orderNew&&item.getPara_order()<orderOld){
                    item.setPara_order(item.getPara_order()+1);
                    flag = (parameterMapper.updateByPrimaryKey(item)>0);
                    if(!flag) return false;
                }
            }
        }
        return parameterMapper.updateByPrimaryKey(parameter)>0;
    }

    public boolean deleteParameterById(int id) {
//        Parameter parameter = parameterMapper.selectByPrimaryKey(id);
//        Example example=new Example(Parameter.class);
//        Example.Criteria criteria =example.createCriteria();
//        if(!StringUtils.isEmpty(parameter.get())){
//            criteria.andEqualTo("org_name",organization.getOrg_name());
//        }
//        List<AnnualInform> annualInforms = annualInformMapper.selectByExample(example);
//        if(!annualInforms.isEmpty()){
//            return false;
//        }
        return parameterMapper.deleteByPrimaryKey(id)>0;
    }

    public boolean pareValueDupOrNot(Parameter parameter){
        List<Parameter> parameters=null;
        Example example=new Example(Parameter.class);
        Example.Criteria criteria =example.createCriteria();
        if(!StringUtils.isEmpty(parameter.getPara_value())){
            criteria.andEqualTo("para_type",parameter.getPara_value());
        }
        parameters = parameterMapper.selectByExample(example);
        if(parameters.isEmpty()){
            return true;
        }
        return false;
    }
    public List<Parameter> parameterListForOrder(Parameter parameter){
        List<Parameter> parameters=null;
        Example example=new Example(Parameter.class);
        example.setOrderByClause("para_order ASC");
        Example.Criteria criteria = example.createCriteria();
        if(parameter.getPara_type()==0||parameter.getPara_type()==1||parameter.getPara_type()==2||parameter.getPara_type()==3){
            criteria.andEqualTo("para_type",parameter.getPara_type());
        }
        parameters = parameterMapper.selectByExample(example);
        return parameters;
    }
    public List<Parameter> parameterListAll(){
        return this.parameterMapper.selectAll();
    }
    //得到4种参数的初始化枚举值对应关系
    public InitialFronSelector getInitialFronSelector(){
        InitialFronSelector initialFronSelector = new InitialFronSelector();
        List<Parameter> parameterList = this.parameterListAll();
        for (Parameter item:parameterList){
            switch (item.getPara_type()){
                case 0 : initialFronSelector.getPos_typeList().add(item); continue;
                case 1 : initialFronSelector.getDeal_typeList().add(item); continue;
                case 2 : initialFronSelector.getDept_typeList().add(item); continue;
                case 3 : initialFronSelector.getDuty_typeList().add(item); continue;
                default:break;
            }
        }
        return initialFronSelector;
    }
}
